嵌入式Linux下移動機(jī)器人超聲波測距系統(tǒng)
關(guān)鍵詞: 機(jī)器人;ARM9;超聲波;導(dǎo)航;避障
在機(jī)器人的導(dǎo)航系統(tǒng)中,超聲波傳感器以其信息處理簡單、速度快和價格低等優(yōu)點,被廣泛用作移動機(jī)器人的測距傳感器,以實現(xiàn)避障、定位和導(dǎo)航等功能。實驗室機(jī)器人以S3C2410+Linux系統(tǒng)為架構(gòu),采用了高精度的SRF05超聲波傳感器測距,實現(xiàn)對機(jī)器人的導(dǎo)航避障。該傳感器的回波反饋與測距方式與通用的超聲波傳感器有所區(qū)別,在S3C2410系統(tǒng)中實現(xiàn)也稍有難度,由于傳感器精度可達(dá)到1cm,因此使用該傳感器彌補(bǔ)了通用超聲波傳感器近距離測距存在盲點的問題,節(jié)省了外圍紅外測距模塊等硬件資源。
1 SRF05傳感器工作原理
S3C2410微控制器利用10 μs的高頻脈沖觸發(fā)SRF05傳感器,觸發(fā)下傳感器會發(fā)出8個40 kHz的超頻脈沖,當(dāng)SRF05傳感器的ECHO引腳電平為高時,開啟定時器計數(shù)器計時;當(dāng)ECHO變?yōu)榈碗娖綍r,表明機(jī)器人遇到障礙物,編程實現(xiàn)定時器停止計時。高脈沖寬度與測距距離有正比關(guān)系,SRF05的測距有效范圍為1 cm~4 m,無障礙物或遇超大障礙物時,ECHO腳會變?yōu)榈碗娖?,此過程需要時間為30 ms,設(shè)置定時器的周期比超聲傳感器探測最大距離所需的渡越時間稍長。因此,在測距時定時器周期設(shè)置應(yīng)至少大于30 ms才能有效測距。
2 系統(tǒng)方案設(shè)計
2.1 系統(tǒng)組成結(jié)構(gòu)
輪式移動機(jī)器人核心控制系統(tǒng)由觸摸屏顯示、攝像頭圖像采集、超聲波避障、直流電機(jī)閉環(huán)控制、人感應(yīng)傳感器、水(火)檢測和氣體檢測模塊、串口無線Modem模塊部分組成。其中超聲波避障模塊直接影響機(jī)器人行進(jìn)位移的精度以及在有效范圍內(nèi)的圖像采集控制。整個系統(tǒng)基于ARM9架構(gòu)的S3C2410微控制器與Linux系統(tǒng)平臺,使用Linux系統(tǒng)驅(qū)動程序控制各個硬件模塊[1]。
2.2 超聲波測距系統(tǒng)
為了實現(xiàn)導(dǎo)航、避障,移動機(jī)器人的前、后、左、右各安裝1路SRF05超聲波傳感器,使機(jī)器人能夠感知4個方位的障礙信息。另外,為了滿足系統(tǒng)擴(kuò)展,可添加安裝多路SRF05超聲波傳感器,進(jìn)一步增強(qiáng)機(jī)器人的導(dǎo)航避障性能。安裝超聲波傳感器之間角度應(yīng)該大于它的波束角30°,這樣傳感器同時工作時才不會有干擾。采用分組的方式,左右兩套和前后兩套分別為一組,組與組之間采用輪循的方式工作。這樣既可以得到很高的采集頻率,同時也滿足了系統(tǒng)的實時性要求。
采用相關(guān)GPIO口作為超聲波傳感器的INIT觸發(fā)引腳,并且配置定時器周期,設(shè)置定時中斷及外部中斷。測距流程:開始打開超聲波,激發(fā)傳感器INIT引腳10 ms,打開定時器并開始計時,在定時器周期內(nèi)收到傳感器ECHO低電平觸發(fā)外部中斷,在外部中斷處理程序中讀取定時器計數(shù)值,計算障礙物距離,并且傳送給中央處理器。不同組傳感器的開啟在定時中斷中完成,并且開啟另一定時器完成計數(shù)功能[2]。系統(tǒng)測距流程圖如圖1所示。
2.3 采集回波
S3C2410 GPIO觸發(fā)中斷只能設(shè)置一種觸發(fā)方式,如果設(shè)為上升沿觸發(fā)打開定時器計時,則無法捕獲下降沿,也就無法關(guān)閉定時器,因此采用軟件方式實現(xiàn)。設(shè)置2個時間延遲函數(shù)usdelay( )和msdelay( ),在給出10 ms高頻脈沖后等超聲波觸發(fā)再使能定時器計時,這些在該組傳感器對應(yīng)的定時器中斷中完成。并設(shè)置外部中斷EINT1接收超聲波傳感器的ECHO回波引腳的變化。其觸發(fā)方式為下降沿觸發(fā),等下降沿來臨關(guān)閉定時器讀出計數(shù)值即為脈寬的時間長度時,然后根據(jù)距離公式=(ECHO 高電平的時間)×(聲納速度)/2得出距離??諝庵蠽與溫度關(guān)系:T為攝氏溫度[3]。一般情況下超聲波速近似聲速,在室內(nèi)溫度影響下取約343.2 m/s。
3 軟件實現(xiàn)
3.1 延遲函數(shù)實現(xiàn)
設(shè)計軟件延遲函數(shù)usdelay( ),代碼實現(xiàn)如下:
static int delayLoopCount1=10;
void usdelay(int time)
{ int i;
for(;time>0;time--)
for(i=0;i 函數(shù)延遲時間為10μs,打開傳感器激發(fā)高頻脈沖后延遲10μs然后關(guān)脈沖,即可利用該函數(shù)。
設(shè)計msdelay( )函數(shù)用于衡量整個測距周期的時間值。msdelay(1000)延遲大約為1 s,這樣系統(tǒng)可以有足夠的回波檢測時間,同時也不會對其他多路超聲波傳感器造成信號干擾。msdelay( )代碼實現(xiàn)如下:
static int delayLoopCount2=1310;
void msdelay(int time)
{ int i;
for(;time>0;time--)
for(i=0;i 可以利用PC口相關(guān)引腳作為超聲波傳感器使能端口,程序?qū)崿F(xiàn)如下:
rGPCCON=0x555;//端口C為輸出口用于啟動超聲波,可激發(fā)多路超聲波
rGPCDAT=0x0;//數(shù)據(jù)位清0
rGPCDAT=0xf;//設(shè)置為高頻脈沖,發(fā)出8T 40kHz超頻波
usdelay(1);//延遲10μs
rGPCDAT=0x0;//清數(shù)據(jù)位
3.2 回波檢測實現(xiàn)
利用定時器計數(shù)器功能和外部中斷可以實現(xiàn)回波檢測計算障礙物距離,外部中斷接超聲波的ECHO并設(shè)置為下降沿觸發(fā)。定時器的初始化如下:
rTCFG0=0x9595; //預(yù)分頻值為95
rTCFG1=0x00000; //分割值1/2
rTCNTB0=10 000;
根據(jù)T=[TCNTB0×(TCFG0+1)×(1/TCFG1)]/50MHz得出定時器的周期為60ms,在這個時間段內(nèi)足以計算回波時間。
外部中斷1初始化如下:
rGPFCON=0xaa; //GPF1 設(shè)置為 EINT1
rINTMOD=0x0; //為普通中斷
rGPFUP=0xf; //禁止 GPF0 上拉電阻
pISR_EINT1=(unsigned)Eint1Handler; //設(shè)置外部中斷
//中斷向量
EnableIrq(BIT_EINT1); //使能中斷
rEXTINT0 =0x492; // EINT1 下降沿觸發(fā)
3.3 障礙物距離計算
void __irq Eint1Handler(void) // eint1 中斷服務(wù)子程序
{
sonar_time_front =((10000- rTCNTO0) >> 1);//定時器的計數(shù)值除以2即為障礙物距離
ClearP
提交
超越傳統(tǒng)直覺,MATLAB/Simulink助力重型機(jī)械的智能化轉(zhuǎn)型
新大陸自動識別精彩亮相2024華南國際工業(yè)博覽會
派拓網(wǎng)絡(luò)被Forrester評為XDR領(lǐng)域領(lǐng)導(dǎo)者
智能工控,存儲強(qiáng)基 | ??低晭砭手黝}演講
展會|Lubeworks路博流體供料系統(tǒng)精彩亮相AMTS展會